package leetcode;

import java.util.HashMap;
import java.util.Map;

/**
 * 290.单词规律
 * 判断两条字符串是否具有相同的规律。
 *
 * 输入: pattern = "abba", str = "dog cat cat dog"
 * 输出: true
 *
 * 输入:pattern = "abba", str = "dog cat cat fish"
 * 输出: false
 */
public class Num_290 {
    public boolean wordPattern(String pattern, String s) {
        //先将s分割到数组中
        String[] str = s.split(" ");
        //判断长度
        if(pattern.length() != str.length){
            return false;
        }
        //建立两条哈希表
        Map<Character,String> map1 = new HashMap<>();
        Map<String,Character> map2 = new HashMap<>();
        //遍历两条字符串,建立双映射关系
        for(int i = 0; i < pattern.length(); i++){
            //Character -> String
            if(! map1.containsKey(pattern.charAt(i))){
                //map1中还没有该对应关系，则直接添加该关系到表中
                map1.put(pattern.charAt(i), str[i]);
            }else if(! str[i].equals(map1.get(pattern.charAt(i)))){
                //如果表中已存在一种对应关系，但是对应的字符串不一致则返回false
                return false;
            }
            //String -> Character
            if(! map2.containsKey(str[i])){
                map2.put(str[i], pattern.charAt(i));
            }else if(pattern.charAt(i) != map2.get(str[i])){
                return false;
            }
        }
        return true;
    }
}
